﻿using System;

namespace HEFramework
{
    // GetChildSystem有巨大作用，比如每次保存Unit的数据不需要所有子对象都保存，只需要保存Unit变化过的子对象
    // 是否变化可以通过判断该子对象是否GetChild，Get了就记录该
    // 这样可以只保存Unit变化过的子对象
    // 再比如传送也可以做此类优化
    public interface IGetChild
    {
    }

    public interface IGetChildSystem : ISystemType
    {
        void Run(Entity _parent, Entity _child);
    }

    [EntitySystem]
    public abstract class GetChildSystem<T> : IGetChildSystem where T : Entity, IGetChild
    {
        Type ISystemType.Type()
        {
            return typeof(T);
        }

        Type ISystemType.SystemType()
        {
            return typeof(IGetChildSystem);
        }

        int ISystemType.GetInstanceQueueIndex()
        {
            return InstanceQueueIndex.None;
        }

        void IGetChildSystem.Run(Entity _parent, Entity _child)
        {
            this.GetChild((T)_parent, _child);
        }

        protected abstract void GetChild(T _self, Entity _child);
    }
}